package com.agent.common.utils;

import com.agent.common.entity.UserContext;

import javax.servlet.http.HttpServletRequest;

/**
 * 用户上下文持有器
 *
 * @author Jeff_Wan
 * @description 使用ThreadLocal存储用户上下文信息
 */
public class UserContextHolder {
    private static final ThreadLocal<UserContext> contextHolder = new ThreadLocal<>();

    /**
     * 设置用户上下文
     *
     * @param context 用户上下文对象
     */
    public static void set(UserContext context) {
        contextHolder.set(context);
    }

    /**
     * 获取当前用户上下文
     *
     * @return 用户上下文对象
     */
    public static UserContext getCurrentUser() {
        return contextHolder.get();
    }

    /**
     * 清除用户上下文
     */
    public static void clear() {
        contextHolder.remove();
    }

    /**
     * 从请求中获取用户上下文
     *
     * @param jwtUtils
     * @return
     */
    public static UserContext getCurrentUser(JwtUtils jwtUtils) {
        return TokenInfoUtils.getCurrentUser(jwtUtils);
    }

    /**
     * 从指定请求中提取用户
     *
     * @param request
     * @param jwtUtils
     * @return
     */
    public static UserContext extractFromRequest(
            HttpServletRequest request,
            JwtUtils jwtUtils
    ) {
        return TokenInfoUtils.extractUserFromRequest(request, jwtUtils);
    }
}